package co.edu.uniquindio.logica;

import static javax.persistence.InheritanceType.JOINED;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.sun.xml.rpc.processor.modeler.j2ee.xml.string;

/**
 * Entity implementation class for Entity: Persona
 * esta entidad me representa a una persona en la logica del negocio
 * 
 * @author Andres Felipe Abril
 * @author Luis Enrique Robledo
 */

@Entity
@Table(name="Persona")
@Inheritance(strategy = JOINED)
public class Persona implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * este atributo representa la cedula de una persona
	 */
	@Id
	private String cedula;
	/**
	 * este atributo representa el pais de una persona
	 */
	@ManyToOne
	private Pais pais;
	/**
	 * este atributo representa el nombre de una persona
	 */
	private String nombre;
	/**
	 * este atributo representa el alias de una persona
	 */
	private String alias;
	/**
	 * este atributo representa el correo de una persona
	 */
	private String correo;
	/**
	 * este atributo representa la contraseña de una persona
	 */
	private String contrasenia;
    /**
     *  
     */
	private Boolean estado=true;
	/**
	 * metodo constructor permite crear a una persona recibiendo los atributos de la misma
	 * @param cedula de la nueva persona 
	 * @param correo de la  nueva persona
	 * @param nombre de la nueva persona
	 * @param pais de la nueva persona
	 * @param alias de la nueva persona
	 */
	public Persona(String cedula,String correo,String nombre,Pais pais,String alias,String contrasenia)
	{
		this.pais=pais;
		this.cedula=cedula;
		this.correo=correo;
		this.nombre=nombre;
		this.alias=alias;
		this.contrasenia=contrasenia;
	}
	public Persona()
	{
		
	}
	/**
	 * este metodo me permite obtener la cedula de la persona
	 * @return la cedula actual de la persona
	 */ 
	public String getCedula() {
		return this.cedula;
	}
	/**
	 * este metodo me permite modificar la cedula de la persona
	 * @param nueva cedula
	 */
	public void setCedula(String cedula) {
		this.cedula = cedula;
	}   
	/**
	 * este metodo me permite obtener el nombre la persona 
	 * @return el nombre actual de la persona
	 */
	public String getNombre() {
		return this.nombre;
	}
    /**
     * este metodo me permite modificar el nombre de la persona 
     * @param nuevo nombre de la persona
     */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}   
	/**
	 * este metodo me permite obtener el correo de la persona
	 * @return el correo de la persona
	 */
	public String getCorreo() {
		return this.correo;
	}
    /**
     * este metodo me permite modificar el el correo de la persona
     * @param el nuevo correo de la persona
     */
	public void setCorreo(String correo) {
		this.correo = correo;
	}
	/**
	 * este metodo me permite obtener el pais de una persona
	 * @return el pais de la persona
	 */
	public Pais getPais() {
		return pais;
	}
	/**
	 * este metodo me permite modificar el pais de una persona
	 * @param el nuevo pais de la persona
	 */
	public void setPais(Pais pais) {
		this.pais = pais;
	}
	/**
	 * este metodo me permite obtener 
	 * @return the alias
	 */
	public String getAlias() {
		return alias;
	}
	/**
	 * este metodo me permite modificar el alias de  una persona
	 * @param alias the alias to set
	 */
	public void setAlias(String alias) {
		this.alias = alias;
	}
	/**
	 * este metodo me permite obtener la contraseña de una persona
	 * @return la contraseña de la persona
	 */
	public String getContrasenia() {
		return contrasenia;
	}
	/**
	 * este metodo me permite modificar la contraseña de una persona
	 * @param contraseña the contraseña to set
	 */
	public void setContrasenia(String contrasenia) {
		this.contrasenia = contrasenia;
	}
	/**
	 * Este metodo permite
	 * @return the estado
	 */
	public Boolean getEstado() {
		return estado;
	}
	/**
	 * Este metodo me permite 
	 * @param estado el estado a modificar
	 */
	public void setEstado(Boolean estado) {
		this.estado = estado;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cedula == null) ? 0 : cedula.hashCode());
		return result;
	}
	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Persona other = (Persona) obj;
		if (cedula == null) {
			if (other.cedula != null)
				return false;
		} else if (!cedula.equals(other.cedula))
			return false;
		return true;
	}

}
